x11: Handle obsolete selection requests without crashing
authorMatthias Clasen <mclasen@redhat.com>
Sun, 25 Jan 2015 00:31:11 +0000 (19:31 -0500)
committerMatthias Clasen <mclasen@redhat.com>
Sun, 25 Jan 2015 00:32:52 +0000 (19:32 -0500)
The ICCCM says:

If the specified property is None, the requestor is an obsolete client.
Owners are encouraged to support these clients by using the specified
target atom as the property name to be used for the reply.

Lets do that, instead of crashing.

https://bugzilla.gnome.org/show_bug.cgi?id=740613

The previous fix for this issue in 732af31424b8f382d was incomplete.

gdk/x11/gdkdisplay-x11.c

index e658780994851b644cd1d4555712c07150338b6b..1477a75d8b231ebcf75039a40c1b75e1942a033b 100644 (file)
@@ -919,7 +919,10 @@ gdk_x11_display_translate_event (GdkEventTranslator *translator,
       event->selection.window = window;
       event->selection.selection = gdk_x11_xatom_to_atom_for_display (display, xevent->xselectionrequest.selection);
       event->selection.target = gdk_x11_xatom_to_atom_for_display (display, xevent->xselectionrequest.target);
-      event->selection.property = gdk_x11_xatom_to_atom_for_display (display, xevent->xselectionrequest.property);
+      if (xevent->xselectionrequest.property == None)
+        event->selection.property = event->selection.target;
+      else
+        event->selection.property = gdk_x11_xatom_to_atom_for_display (display, xevent->xselectionrequest.property);
       if (xevent->xselectionrequest.requestor != None)
         event->selection.requestor = gdk_x11_window_foreign_new_for_display (display,
                                                                              xevent->xselectionrequest.requestor);